import axios from 'axios'  //引入axios
//下面这两个不一定需要引入，看你项目需要拦截的时候做什么操作，但是一般都需要引入store
import store from '@/store/index'  //引入store
import router from '@/router'  //引入router
import { Toast } from 'vant';

// 创建axios实例 
let http = axios.create({
  headers: {
    'content-type': 'application/json'
  }
})

// http request 拦截器
http.interceptors.request.use(
  config => {
    var token=store.state.token;
    //var token='530e0198a5c0f5979184f764c35bd6072c79b02b';
    //const token = sessionStorage.getItem('token')
    //console.log(token,"进入token")
    if (token) { // 判断是否存在token，如果存在的话，则每个http header都加上token
      config.headers.common['lan-token'] = token  //请求头加上token
    }
    return config
  },
  err => {
    return Promise.reject(err)
  })

  // http response 拦截器
http.interceptors.response.use(
  response => {
    //拦截响应，做统一处理 
    //console.log(response,63636);
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
        // 否则的话抛出错误
        if (response.status === 200) {
          if(response.data.code==4001){
            //Toast("未登录")
            //console.log("用户不存在11");
           //setTimeout(function(){
            router.replace({
              path: '/login',
             query: {
                  redirect: router.currentRoute.fullPath
              }
           });

          // },500)    
          };
          if(response.data.code==4000){
           Toast(response.data.msg)
          };
         // Toast(response.data.msg)
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }

  },
  //接口错误状态处理，也就是说无响应时的处理
  error => {
    console.log(error,"错误信息")
    if (error.response.status) {
      switch (error.response.status) {
        case 401:
              router.replace({
              path: '/login',
                  query: {
                            redirect: router.currentRoute.fullPath
                }
                    });
                    break;
                    // 403 token过期
                    // 登录过期对用户进行提示
                    // 清除本地token和清空vuex中token对象
                    // 跳转登录页面
        case 403:
                 Toast({
                   message: '登录过期，请重新登录',
                   duration: 1000,
                   forbidClick: true
               });
               // 清除token
               localStorage.removeItem('token');
               store.commit('loginSuccess', null);
               // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
               setTimeout(() => {
                router.replace({
                                path: '/login',
                                query: {
                                    redirect: router.currentRoute.fullPath
                                }
                            });
                        }, 1000);
                        break;
                        // 404请求不存在
          case 404:
                  Toast({
                      message: '网络请求不存在',
                      duration: 1500,
                      forbidClick: true
                  });
                  break;
                            // 其他错误，直接抛出错误提示
          default:
                Toast({
                    message: error.response.data.message,
                    duration: 1500,
                    forbidClick: true
                });
      }
      return Promise.reject(error.response);

    }
    
  }
  
)

  export default http

